package buffbuildergui;

import java.util.ArrayList;

public class Ability extends Entity{

    @SuppressWarnings("oracle.jdeveloper.java.nested-assignment")
    public Ability(String nam) {
        name = nam;
        
        ArrayList<String> temp = new ArrayList<>();
        ArrayList<String> temp0 = new ArrayList<>();
        Property p = null;
        Property q = null;
        Property r = null;
        Property s = null;
        ArrayList<Property> al = null;
        ArrayList<Property> al0 = null;
        ArrayList<Property> al1 = null;
        
        props.add(p=new Property("needsToFaceTarget",Property.BOOLEAN,this));
        props.add(p=new Property("canCollideWithTarget",Property.BOOLEAN,this));
        props.add(p=new Property("moveThruTarget",Property.BOOLEAN,this));
        props.add(p=new Property("isUltimateAbility",Property.BOOLEAN,this));
        props.add(p=new Property("maxNumLevels",Property.INTEGER,this));
        temp = new ArrayList<>();
        temp.add("\"FixedLevel0\"");
        temp.add("\"Intrinsic\"");
        temp.add("\"ResearchWithBase\"");
        temp.add("\"ResearchWithoutBase\"");
        temp.add("\"StarbaseUpgradeLevel\"");
        temp.add("\"TitanUpgradeLevel\"");
        props.add(p=new Property("levelSourceType",Property.FINITE,temp,this));
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("minExperienceLevelRequired",Property.VOID,this));
                doubleLevels(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("baseSourceResearchSubject",Property.QUOTED,this));
                al.add(q=new Property("improveSourceResearchSubject",Property.QUOTED,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("improveSourceResearchSubject",Property.QUOTED,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("levelSourceType",Property.QUOTED,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("levelSourceType",Property.QUOTED,this));
        
        
        
        temp = new ArrayList<>();
        temp.add("\"Anytime\"");
        temp.add("\"Invalid\"");
        temp.add("\"NotInCombat\"");
        temp.add("\"OnlyInCombat\"");
        temp.add("\"OnlyWhenAttackTargetIsInFiringSolution\"");
        temp.add("\"OnlyWhenBombing\"");
        temp.add("\"OnlyWhenManyTargetsInRange\"");
        temp.add("\"OnlyWhenManyTargetsInRangeOfBank\"");
        temp.add("\"OnlyWhenManyTargetsInCombatDoNotHaveBuff\"");
        temp.add("\"OnlyWhenManyTargetsHaveHullDamage\"");
        temp.add("\"OnlyWhenManyTargetsHaveShieldDamage\"");
        temp.add("\"OnlyWhenManyTargetsHyperspacingTowardsMyGravityWell\"");
        temp.add("\"OnlyWhenMovingThresholdDistance\"");
        temp.add("\"OnlyWhenOrbitingEnemyPlanet\"");
        temp.add("\"OnlyWhenOrbitingEnemyOrAlliedPlanet\"");
        temp.add("\"OnlyWhenTakingDamage\"");
        temp.add("\"OnlyWithNoOrder\"");
        props.add(p=new Property("aiUseTime",Property.FINITE,temp,this));
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("OnlyAutoCastWhenTargetCountExceedsAmount",Property.VOID,this));
                doubleLevels(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("OnlyAutoCastWhenTargetCountExceedsAmount",Property.VOID,this));
                doubleLevels(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("OnlyAutoCastWhenTargetCountExceedsAmount",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("onlyAutoCastWhenTotalHullDamageExceedsAmount",Property.VOID,this));
                doubleLevels(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("thresholdDistance",Property.DOUBLE,this));
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
        temp = new ArrayList<>();
        temp.add("\"Any\"");
        temp.add("\"Invalid\"");
        temp.add("\"IsDifferentRoleType\"");
        temp.add("\"IsNotWeaponDisabled\"");
        temp.add("\"HullDamageExceedsAmount\"");
        temp.add("\"ShieldDamageExceedsAmount\"");
        props.add(p=new Property("aiUseTargetCondition",Property.FINITE,temp,this));
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("onlyAutoCastWhenTargetHullDamageExceedsAmount",Property.VOID,this));
                doubleLevels(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("onlyAutoCastWhenTargetShieldDamageExceedsAmount",Property.VOID,this));
                doubleLevels(al);
        props.add(p=new Property("isAutoCastAvailable",Property.BOOLEAN,this));
        props.add(p=new Property("isAutoCastOnByDefault",Property.BOOLEAN,this));
        props.add(p=new Property("pickRandomPlanetToExploreForAutoCastTarget",Property.BOOLEAN,this));
        props.add(p=new Property("ignoreNonCombatShipsForAutoCastTarget",Property.BOOLEAN,this));
        props.add(p=new Property("onlyAutoCastWhenDamageTakenExceedsPerc",Property.DOUBLE,this));
        temp = new ArrayList<>();
        temp.add("\"AntiMatter\"");
        temp.add("\"Passive\"");
        temp.add("\"Resources\"");
        temp.add("\"ResourcesAndMustHaveCapitalCrew\"");
        temp.add("\"ResourcesAndMustHaveShipSlots\"");
        temp.add("\"ResourcesAndMustHaveTitan\"");
        props.add(p=new Property("useCostType",Property.FINITE,temp,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("antiMatterCost",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("cooldownTime",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("orderAcknowledgementType \"ONGENERALORDERISSUED\"",Property.VOID,this));
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("resourceCost",Property.VOID,this));
                al.add(q=new Property("credits",Property.DOUBLE,this));
                al.add(q=new Property("metal",Property.DOUBLE,this));
                al.add(q=new Property("crystal",Property.DOUBLE,this));
                al.add(q=new Property("cooldownTime",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("orderAcknowledgementType \"ONGENERALORDERISSUED\"",Property.VOID,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("resourceCost",Property.VOID,this));
                al.add(q=new Property("credits",Property.DOUBLE,this));
                al.add(q=new Property("metal",Property.DOUBLE,this));
                al.add(q=new Property("crystal",Property.DOUBLE,this));
                al.add(q=new Property("cooldownTime",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("orderAcknowledgementType \"ONGENERALORDERISSUED\"",Property.VOID,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("resourceCost",Property.VOID,this));
                al.add(q=new Property("credits",Property.DOUBLE,this));
                al.add(q=new Property("metal",Property.DOUBLE,this));
                al.add(q=new Property("crystal",Property.DOUBLE,this));
                al.add(q=new Property("requiredShipSlots",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("cooldownTime",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("orderAcknowledgementType \"ONGENERALORDERISSUED\"",Property.VOID,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("resourceCost",Property.VOID,this));
                al.add(q=new Property("credits",Property.DOUBLE,this));
                al.add(q=new Property("metal",Property.DOUBLE,this));
                al.add(q=new Property("crystal",Property.DOUBLE,this));
                al.add(q=new Property("cooldownTime",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("orderAcknowledgementType \"ONGENERALORDERISSUED\"",Property.VOID,this));
            
        
        props.add(p=new Property("researchPrerequisites",Property.VOID,this));
        temp = new ArrayList<>();
        temp.add("0");
        temp.add("1");
        temp.add("2");
        temp.add("3");
        temp.add("4");
        props.add(p=new Property("NumResearchPrerequisites",Property.FINITE,temp,this));
            al = new ArrayList<>();
            p.plugs.add(al);
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
            al = new ArrayList<>();
            p.plugs.add(al);
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
                al.add(q=new Property("ResearchPrerequisite",Property.VOID,this));
                al.add(q=new Property("Subject",Property.QUOTED,this));
                al.add(q=new Property("Level",Property.INTEGER,this));
        props.add(p=new Property("RequiredFactionNameID",Property.QUOTED,this));
        props.add(p=new Property("RequiredCompletedResearchSubjects",Property.INTEGER,this));
        props.add(p=new Property("nameStringID",Property.QUOTED,this));
        props.add(p=new Property("descStringID",Property.QUOTED,this));
        props.add(p=new Property("hudIcon",Property.QUOTED,this));
        props.add(p=new Property("smallHudIcon",Property.QUOTED,this));
        props.add(p=new Property("infoCardIcon",Property.QUOTED,this));
    }
}
